﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Entidades;
using System.Data;
using System.Data.SqlClient;

namespace AccesoBD
{
    public class ObrasSociales
    {

        public static DataTable ObtenerTodos()
        {
            DataTable tablaOS = null;
            SqlConnection con;
            con = DB.Conectar();
            try
            {
                string comando = "select * from Obra_Social";

                List<SqlParameter> listp = new List<SqlParameter>();

                tablaOS = DB.GenerarTable(comando, listp, con);

                if (tablaOS.Rows.Count > 0)
                {
                    return tablaOS;
                }
            }

            catch (Exception Ex)
            {

                throw new Exception("Error al cargar las Obras Sociales", Ex);
            }
            finally
            {
                con.Close();
            }
            return tablaOS;

        }
        public static ObraSocial ObtenerObraSocialPorNombre(string nombre) 
        {
            SqlConnection con = null;
            ObraSocial oS = null;
            try
            {
                con = DB.Conectar();
                string comando = "select * from Obra_Social where siglasOS=@nombre";
                List<SqlParameter> listp = new List<SqlParameter>();
                listp.Add(new SqlParameter("@nombre", nombre));
                SqlDataReader dr = DB.GenerarReader(comando, listp, con);
                if (dr.Read())
                {
                    oS = new ObraSocial();
                    oS.idObraSocial = int.Parse(dr["idObraSocial"].ToString());
                    oS.nombre = dr["nombreObraSocial"].ToString();
                    oS.idDomicilio = int.Parse(dr["idDomicilio"].ToString());
                    oS.fechaAlta = DateTime.Parse(dr["fechaAlta"].ToString());
                    oS.siglas = dr["siglasOS"].ToString();
                    if (dr["idConvenioOS"]!=DBNull.Value)
                    {
                        oS.idConvenioObraSocial = int.Parse(dr["idConvenioOS"].ToString());
                    }
                    if (dr["descripcion"]!=DBNull.Value)
                    {
                        oS.descripcion = dr["descripcion"].ToString();
                    }
                    if (dr["fechaBaja"]!=DBNull.Value)
                    {
                        oS.fechaBaja = DateTime.Parse(dr["fechaBaja"].ToString());
                    }

                    
                }

            }
            catch (Exception Ex)
            {

                throw new Exception("Error al cargar una obra social", Ex);
            }
            finally 
            
            {
                con.Close();
            }
            return oS;
        }
        public static DataTable ObtenerTodasOSActivas()
        {
            DataTable tablaOS = null;
            SqlConnection con;
            con = DB.Conectar();
            try
            {
                string comando = "select * from Obra_Social where fechaBaja=''";

                List<SqlParameter> listp = new List<SqlParameter>();

                tablaOS = DB.GenerarTable(comando, listp, con);

                if (tablaOS.Rows.Count > 0)
                {
                    return tablaOS;
                }
            }

            catch (Exception Ex)
            {

                throw new Exception("Error al cargar las Obras Sociales", Ex);
            }
            finally
            {
                con.Close();
            }
            return tablaOS;

        }


        public static bool ObtenerExistenciaOOSSPorCuit(long cuit)
        {
            SqlConnection con = null;

            try
            {
                con = DB.Conectar();

                string comando = "Select * from Obra_Social where cuit=@cuit";
                List<SqlParameter> listp = new List<SqlParameter>();
                listp.Add(new SqlParameter("@cuit", cuit));
                SqlDataReader dr = DB.GenerarReader(comando, listp, con);
                if (dr.Read())
                {
                    return true;
                }

            }
            catch (Exception Ex)
            {

                throw new Exception("Error al cargar La Obra social", Ex);
            }
            finally
            {
                con.Close();
            }

            return false;

        }
        public static ObraSocial ObtenerExistenciaOOSSPorNombre(string nombre)
        {
            SqlConnection con = null;
            ObraSocial oS = null;

            try
            {
                con = DB.Conectar();

                string comando = "Select * from Obra_Social where nombreObraSocial=@nombreObraSocial";
                List<SqlParameter> listp = new List<SqlParameter>();
                listp.Add(new SqlParameter("@nombreObraSocial", nombre));
                SqlDataReader dr = DB.GenerarReader(comando, listp, con);
                if (dr.Read())
                {
                    oS.nombre = dr["nombreObraSocial"].ToString();
                    oS.siglas = dr["cuit"].ToString();
                    oS.idObraSocial = int.Parse(dr["idObraSocial"].ToString());

                }

            }
            catch (Exception Ex)
            {

                throw new Exception("Error al cargar La Obra social", Ex);
            }
            finally
            {
                con.Close();
            }

            return oS;

        }
        public static int registrarOOSS(ObraSocial oS, Domicilio oD)
        {
            SqlConnection con = null;
            SqlTransaction tran = null;

            int resultado = 0;
            try
            {
                con = DB.Conectar();
                tran = con.BeginTransaction();

                string comando = "insert into Domicilio (calle, numero, idBarrio, piso, departamento,codigoPostal) values(@calle, @numero, @idBarrio,@piso,@departamento,@codigoPostal)";
                List<SqlParameter> listp = new List<SqlParameter>();

                listp.Add(new SqlParameter("@calle", oD.calle));
                listp.Add(new SqlParameter("@numero", oD.numero));
                listp.Add(new SqlParameter("@idBarrio", oD.idBarrio));
                if (oD.piso == null)
                {
                    listp.Add(new SqlParameter("@Piso", DBNull.Value));
                }
                else
                {
                    listp.Add(new SqlParameter("@Piso", oD.piso));
                }
                if (oD.Departamento == null)
                {
                    listp.Add(new SqlParameter("@departamento", DBNull.Value));
                }
                else
                {
                    listp.Add(new SqlParameter("@departamento", oD.Departamento));

                }
                if (oD.codPostal == null)
                {
                    listp.Add(new SqlParameter("@codigoPostal", DBNull.Value));
                }
                else
                {
                    listp.Add(new SqlParameter("@codigoPostal", oD.codPostal));

                }

                resultado = DB.EjecutarCommand(comando, listp, con, tran);

                if (resultado > 0)
                {
                    oS.idDomicilio = Domicilios.ObtenerUltimoIDDomicilio(tran, con);
                    comando = "insert into Obra_Social (nombreObraSocial,cuit,descripcion,idDomicilio,idConvenioOS,fechaAlta,fechaBaja, siglasOS) values (@nombre,@cuit,@descripcion,@idDomicilio,@idConvenioOS,@fechaAlta,@fechaBaja,@siglasOS)";
                    listp = null;
                    listp = new List<SqlParameter>();
                    listp.Add(new SqlParameter("@nombre", oS.nombre));
                    listp.Add(new SqlParameter("@cuit", oS.cuit));
                    listp.Add(new SqlParameter("@idDomicilio", oS.idDomicilio));
                    listp.Add(new SqlParameter("@fechaAlta", oS.fechaAlta));
                    if (oS.idConvenioObraSocial == null)
                    {
                        listp.Add(new SqlParameter("@idConvenioOS", DBNull.Value));

                    }
                    else
                    {
                        listp.Add(new SqlParameter("@idConvenioOS", oS.idConvenioObraSocial));
                    }

                    if (oS.descripcion == null)
                    {
                        listp.Add(new SqlParameter("@descripcion", DBNull.Value));
                    }
                    else
                    {
                        listp.Add(new SqlParameter("@descripcion", oS.descripcion));
                    }

                    if (oS.fechaBaja == null)
                    {
                        listp.Add(new SqlParameter("@fechaBaja", DBNull.Value));
                    }
                    else
                    {
                        listp.Add(new SqlParameter("@fechaBaja", oS.fechaBaja));
                    }
                    if (oS.siglas == null)
                    {
                        listp.Add(new SqlParameter("@siglasOS", DBNull.Value));
                    }
                    else
                    {
                        listp.Add(new SqlParameter("@siglasOS", oS.siglas));
                    }

                    resultado = DB.EjecutarCommand(comando, listp, con, tran);

                    if (resultado > 0)
                    {
                        tran.Commit();
                    }
                }


            }
            catch (Exception Ex)
            {
                if (tran != null)
                {
                    tran.Rollback();
                }

                throw new Exception("Error al registrar una nueva OOSS", Ex);
            }
            finally
            {

                con.Close();
            }
            return resultado;
        }
    }
}
